package com.wy._10functionUnit;
import java.util.function.Function;

public final class ObjectComparator<T,R> {
    /**
     * 比较两个对象的指定字段是否相等。
     *
     * @param obj1           第一个对象
     * @param obj2           第二个对象
     * @param objFunctions 字段对应的get方法引用
     * @return 如果指定字段值相等，则返回true；否则返回false
     */
    @SafeVarargs
    public final boolean compare(T obj1, T obj2, Function<T, R>... objFunctions) {
        if (obj1 == null || obj2 == null) {
            throw new RuntimeException("传入对象为空");
        }
        if (obj1.getClass() != obj2.getClass()) {
            throw new RuntimeException("类型不相同");
        }
        if (objFunctions.length <= 0) {
            throw new RuntimeException("你要做什么");
        }

        for (Function<T, R> objFunction : objFunctions) {
            R res1 = objFunction.apply(obj1);
            R res2 = objFunction.apply(obj2);
            if (res1 != res2) {
                return false;
            }
        }
        return true;
    }
}
